#!/bin/bash

# 此脚本需要在zookeeper集群节点执行,包括检测zookeeper进程状态、端口状态

# 系统ID
system_id=$(cat config.cnf | grep SystemId | awk -F "=" '{print $2}')
# 告警存放文件夹
alert_dir=$(cat config.cnf | grep AlertDir | awk -F "=" '{print $2}')
# 告警缓存文件
alarm_file_tmp="zookeeper_check_alarm.txt"
echo -n "" >${alarm_file_tmp}
# 本机ip
local_ip=$(ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:")
# zookeeper端口
zookeeper_port=$(cat config.cnf | grep ZookeeperPort | awk -F "=" '{print $2}')

execute_cycle=$(cat config.cnf | grep ExecuteCycle | awk -F "=" '{print $2}')

# zookeeper进程状态监控
zookeeper_pro_check() {
    zookeeper_pro=$(ps -ef | grep zookeeper | grep -v grep | grep -v zookeeper_check | wc -l)
	if [[ ${zookeeper_pro} == 0 ]]; then
        # 进程状态不存在,告警
         ./gen_alarm.sh -g "应用进程监控" "zookeeper服务状态异常,zookeeper进程不存在,IP:$(hostname -I)" 3 "zookeeper进程" "zookeeper_pro" ${alarm_file_tmp}
    else
        # 告警存在,恢复原告警
        ./gen_alarm.sh -r "应用进程监控" "zookeeper进程恢复正常,IP:$(hostname -I)" "zookeeper进程" "zookeeper_pro" ${alarm_file_tmp}

        # 端口检查
        zookeeper_port_check

    fi
}

# zookeeper运行端口监控
zookeeper_port_check() {
	# 查看zookeeper角色
	cd /app/utcm/canal/apache-zookeeper-3.6.1-bin/bin
	./zkServer.sh status | grep leader >> /dev/null
	if [[ $? -eq 0 ]]; then
		for port in $(echo ${zookeeper_port} | sed "s/,/ /g"); do
			port_info=$(netstat -nplt | grep ":${port} ")
			if [[ ${port_info} == '' ]]; then
				# 端口未监听,告警
				./gen_alarm.sh -g "端口状态" "zookeeper服务端口[${port}]未监听,IP:$(hostname -I)" 3 "zookeeper端口状态" "zookeeper_port" ${alarm_file_tmp}
			else
				# 端口正常且存在告警,需要恢复告警
				./gen_alarm.sh -r "端口状态" "zookeeper服务端口[${port}]恢复正常,IP:$(hostname -I)" "zookeeper端口状态" "zookeeper_port" ${alarm_file_tmp}
			fi
		done
	else
		start_index=6
		end_index=9
		follower_port="${zookeeper_port:0:start_index}${zookeeper_port:end_index+1}"
		for port in $(echo ${follower_port}); do
			port_info=$(netstat -nplt | grep ":${port} ")
			if [[ ${port_info} == '' ]]; then
				# 端口未监听,告警
				./gen_alarm.sh -g "端口状态" "zookeeper服务端口[${port}]未监听,IP:$(hostname -I)" 3 "zookeeper端口状态" "zookeeper_port" ${alarm_file_tmp}
			else
				# 端口正常且存在告警,需要恢复告警
				./gen_alarm.sh -r "端口状态" "zookeeper服务端口[${port}]恢复正常,IP:$(hostname -I)" "zookeeper端口状态" "zookeeper_port" ${alarm_file_tmp}
			fi
		done
	fi
}

while true; do
    holidays_date=$(cat config.cnf | grep Holidays | awk -F "=" '{print $2}' | sed "s/,/ /g")
	current_date=$(date +'%Y-%m-%d')
	echo $holidays_date | grep -o $current_date >> /dev/null
	if [[ $? -eq 0 ]]; then
		exit 0
	else
		echo -n "" >${alarm_file_tmp}
		zookeeper_pro_check
		# 将缓存告警放入告警文件夹
		./gen_alarm.sh -s ${alarm_file_tmp}
		sleep ${execute_cycle}
	fi
done
